'use strict';

import { Service } from 'egg';

export default class SubService extends Service{
    /**
     * 查询一个子类型
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Object} data 查询结果数据结构
     * {Object} data.sub_id 分类ID
     * {String} data.sub_name 分类名称
     * {String} data.create_time 创建时间
     * {Object[]} data.category_list 子分类列表
     * {String} data.category_list.sub_id 子分类ID
     * {String} data.category_list.sub_name 子分类名称
     * {String} data.category_list.checked 是否已经关联
     * 过程：
     *  查询当前类型，以及所有二级类型，并对二级类型做以及关联的标识checked处理
     * 处理后返回成功结果处理逻辑，返回结果
     */
    async find_one(condition){
        const {ctx,app}=this;
        try {
            let sub:any=await app.model.Sub.findOne({
                where:condition
            });
            let {Category,SubCategory}=app.model;
            if(sub&&sub['sub_id']){
                let categories=await Category.findAll({
                    include:[{
                        model:SubCategory,
                        association:Category.hasMany(SubCategory,{foreignKey:'category_id'}),
                        required:false
                    }]
                })
                
                categories=JSON.parse(JSON.stringify(categories));
                categories.forEach(ele=>{
                    ele['checked']=0;
                    if(ele['sub_categories']){
                        if(ele['sub_categories'].length>0){
                            if(ele['sub_categories'].filter(e=>{
                                return e['sub_id']==sub['sub_id']
                            }).length>0){
                                ele['checked']=1;
                            }
                        }
                        delete ele['sub_categories']
                    }
                })
                return ctx.helper.success_result("操作成功",{
                    sub_id:sub['sub_id'],
                    sub_name:sub['sub_name'],
                    category_list:categories,
                    create_time:ctx.helper.date_format(sub['create_time'],'yyyy-MM-dd hh:mm:ss'),
                })
            }
            return ctx.helper.error_result("未找到数据");
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }  
    }
    /**
     * 分页查询所有子分类
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object[]} data 分类列表
     * {String} data.sub_id 类型ID
     * {String} data.sub_name 类型名称
     * {String} data.create_time 创建时间
     * {String} data.data_count 数据总数
     * {String} data.page_count 页码总数
     * {Number} data.sub_id 类型ID
     * {String} data.sub_name 类型名称
     * {String} data.create_time 类型名称
     * 过程：
     *  构建分页查询条件
     *  分页查询数据，分页结果处理逻辑，返回结果
     */
    async find_and_count_all(condition,order_condition,page){
        const {ctx}=this;
        try {
            return ctx.service.common.find_and_count_all(condition,order_condition,page,'Sub');
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
     /**
     * 查询所有子分类
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object} data 查询结果数据结构（is_page为1时为对象为0时则为数组）
     * {Object[]} data 分类列表
     * {String} data.sub_id 类型ID
     * {String} data.sub_name 类型名称
     * {String} data.create_time 创建时间
     * {String} data.data_count 数据总数
     * {String} data.page_count 页码总数
     * {Number} data.sub_id 类型ID
     * {String} data.sub_name 类型名称
     * {String} data.create_time 类型名称
     * 过程：
     *  构建查询条件
     *  查询数据，返回结果
     */
    async find_all(condition,order_condition){
        const {ctx}=this;
        try {
            return ctx.service.common.find_all(condition,order_condition,'Sub');
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
}